var PopupWindowProductos = function(){
    // everything in this space is private and only accessible in the PopupWindowProductos block
    
    // define some private variables
    var dialog, showBtn;
    
    // return a public interface
    return {
        init : function(){
             showBtn = Ext.get('ProductosOferta_commandButtonPopupProductos');
             // attach to click event
             if (showBtn!=null)
             	showBtn.on('click', this.showDialog, this);
        },
       
        showDialog : function(){
            if(!dialog){ // lazy initialize the dialog and only create it once
                dialog = new Ext.BasicDialog("PopupWindowProductos", { 
                        autoTabs:true,
                        modal: true,
                        width:725,
                        height:505,
                        shadow:true,
                        minWidth:725,
                        minHeight:505,
                        proxyDrag: true
                });
                dialog.addKeyListener(27, dialog.hide, dialog);
				dialog.addButton('Seleccionar', MyGridProductos.select, MyGridProductos);                
                dialog.addButton('Cerrar', dialog.hide, dialog);
            }
            //dialog.show(showBtn.dom);
            dialog.show();
        },
        
        hideDialog : function() {
        	dialog.hide();
        }
    };
}();

// using onDocumentReady instead of window.onload initializes the application
// when the DOM is ready, without waiting for images and other resources to load
Ext.onReady(PopupWindowProductos.init, PopupWindowProductos, true);


var MyGridProductos = function() 
{
	var grid;
	var ds;
	var inputTextCurrentTipoCliente;
	var inputTextCurrentTipoVenta;
	var inputTextStockTipo;
	var inputTextStockValor;
	var inputTextPrecioTipo;
	var inputTextPrecioValor;
	var inputTextNomProducto;
	var inputHiddenIdsProdsSelec;
	var commandLinkCargarProdsSel;
	return {
		init : function()
		{
			inputTextCurrentTipoCliente = document.getElementById('ProductosOferta_SelProducto_selectOneChoiceTipoCliente');					
			inputTextCurrentTipoVenta = document.getElementById('inputHidTipoVenta');
			inputTextStockTipo = document.getElementById('ProductosOferta_SelProducto_selectOneMenuTipoFiltroStock');
			inputTextStockValor = document.getElementById('ProductosOferta_SelProducto_inputTextFiltroStock');
			inputTextPrecioTipo = document.getElementById('ProductosOferta_SelProducto_selectOneMenuTipoFiltroPrecio');
			inputTextPrecioValor = document.getElementById('ProductosOferta_SelProducto_inputTextFiltroPrecio');
			inputTextNomProducto = document.getElementById('ProductosOferta_SelProducto_inputTextNomProducto');
			inputHiddenIdsProdsSelec = document.getElementById('ProductosOferta_SelProducto_inputHidden');
			
			commandLinkCargarProdsSel = document.getElementById('ProductosOferta_SelProducto_commandLinkCargarProdsSel');
			
		    // create the Data Store
		    ds = new Ext.data.Store({
		       proxy: new Ext.data.HttpProxy({
		            url: 'listados.list'
		        }),
		    
		        // the return will be XML, so lets set up a reader
		        reader: new Ext.data.XmlReader({
		               // records will have an "Item" tag
		               record: 'item',
		               id: 'id',
		               totalRecords: 'numRegistros'
		           }, [
		               // set up the fields mapping into the xml doc
		               // The first needs mapping, the others are very basic
		               'id','producto', 'tarifa', 'precio', 'stock'
		           ]),
		           
		        baseParams: {
		        	listado : 'preciosProductosOferta',
					p1: '',
					p2: '',
					p3: '',
					p4: '',
					p5: '',
					p6: '',
					p7: ''
				}, 
		           				
		        // turn on remote sorting
		        remoteSort: false
		    });
		    
		    ds.on('beforeload', function(){
						ds.baseParams.p1 = inputTextCurrentTipoCliente.value;
		    			ds.baseParams.p2 = inputTextCurrentTipoVenta.value;
		    			ds.baseParams.p3 = inputTextStockTipo.value;
						ds.baseParams.p4 = inputTextStockValor.value;
		    			ds.baseParams.p5 = inputTextPrecioTipo.value;
						ds.baseParams.p6 = inputTextPrecioValor.value;
						ds.baseParams.p7 = inputTextNomProducto.value;
			});

		    // the column model has information about grid columns
		    // dataIndex maps the column to the specific data field in
		    // the data store
		    var cm = new Ext.grid.ColumnModel([
		    	{
		           header: "Producto",
		           dataIndex: 'producto',
		           width: 280
		        },{
		           header: "Tarifa",
		           dataIndex: 'tarifa',
		           width: 180
		        },{
		           header: "Precio",
		           dataIndex: 'precio',
		           width: 105
		        },{
		           header: "Stock",
		           dataIndex: 'stock',
		           width: 85
		        },{
		           header: "Id",
		           dataIndex: 'id',
		           hidden: true
		        }]);
		
		    
		    // create the editor grid
		    grid = new Ext.grid.Grid('gridProductos', {
		        ds: ds,
		        cm: cm,
		        selModel: new Ext.grid.RowSelectionModel({singleSelect:false}),
		        enableColLock:false,
		        loadMask: true
		    });
		    
		    grid.on('rowdblclick',this.select);
		
		    // make the grid resizable, do before render for better performance
		    var rz = new Ext.Resizable('gridProductos', {
		        wrap:true,
		        minHeight:300,
		        pinned:true,
		        handles: 's'
		    });
		    rz.on('resize', grid.autoSize, grid);
		    
		
		    // render it
		    grid.render();
		
		    var gridFoot = grid.getView().getFooterPanel(true);
		
		    // add a paging toolbar to the grid's footer
		    var paging = new Ext.PagingToolbar(gridFoot, ds, {
		        pageSize: 25,
		        displayInfo: true,
		        displayMsg: 'Visualizando productos {0} - {1} de {2}',
		        emptyMsg: "No existen productos para visualizar"
		    });
		},
		
		loadData : function()
		{
		    // trigger the data store load
		    ds.load({params:{start:0, limit:25}});
		},

		select : function()
		{
			var selectedRows = grid.getSelectionModel().getSelections();
			var idsSelect = '';
			if (selectedRows.length > 0)
			{
			   	for(var i=0; i < selectedRows.length; i++)
			   	{
			      	myData = selectedRows[i].get("id");
			      	if (idsSelect.length > 0) idsSelect = idsSelect + ',';
			      	idsSelect = idsSelect + myData;
			   	}
			   	inputHiddenIdsProdsSelec.value = idsSelect;
				PopupWindowProductos.hideDialog();  					    	
				commandLinkCargarProdsSel.click();
			}
			else
			{
				alert('Debe seleccionar al menos un producto.')
			}
		}
	};
}();

Ext.onReady(MyGridProductos.init,MyGridProductos,true);

